package flc.ast.activity;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.SeekBar;

import com.blankj.utilcode.util.ArrayUtils;
import com.blankj.utilcode.util.ClipboardUtils;
import com.blankj.utilcode.util.ToastUtils;

import java.util.Random;

import flc.ast.BaseAc;
import flc.ast.R;
import flc.ast.databinding.ActivityPasswordGenerateBinding;
import flc.ast.utils.Content;
import stark.common.basic.event.EventStatProxy;

public class PasswordGenerateActivity extends BaseAc<ActivityPasswordGenerateBinding> {

    private int passNumber = 10;//密码位数
    private boolean isOption1 = true;//是否包含大写字母
    private boolean isOption2 = true;//是否包含小写字母
    private boolean isOption3 = true;//是否包含数字
    private boolean isOption4 = true;//是否包含特殊符号

    @Override
    protected int onCreate() {
        return R.layout.activity_password_generate;
    }

    @Override
    protected void initView() {
        EventStatProxy.getInstance().statEvent1(this, mDataBinding.event1Container);

        mDataBinding.ivPasswordGenerateBack.setOnClickListener(v -> onBackPressed());

        mDataBinding.ivPasswordCopy.setOnClickListener(this);
        mDataBinding.ivPassOption1.setOnClickListener(this);
        mDataBinding.ivPassOption2.setOnClickListener(this);
        mDataBinding.ivPassOption3.setOnClickListener(this);
        mDataBinding.ivPassOption4.setOnClickListener(this);
        mDataBinding.tvGeneratePassword.setOnClickListener(this);
    }

    @Override
    protected void onClickCallback(View v) {
        switch (v.getId()) {
            case R.id.ivPasswordCopy://复制密码
                String password = mDataBinding.tvPassText.getText().toString();
                if (TextUtils.isEmpty(password)) return;
                ClipboardUtils.copyText(password);
                ToastUtils.showShort(R.string.copy_suc);
                break;
            case R.id.ivPassOption1://是否包含大写字母
                clickOption1();
                break;
            case R.id.ivPassOption2://是否包含小写字母
                clickOption2();
                break;
            case R.id.ivPassOption3://是否包含数字
                clickOption3();
                break;
            case R.id.ivPassOption4://是否包含特殊符号
                clickOption4();
                break;
            case R.id.tvGeneratePassword://生成密码
                createPassword();
                break;
        }
    }

    @Override
    protected void initData() {
        mDataBinding.sbPasswordLength.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                passNumber = progress;
                mDataBinding.tvPassNumber.setText(passNumber + "");
            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {

            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {

            }
        });
    }

    //生成密码
    private void createPassword() {
        if (isOption1 && !isOption2 && !isOption3 && !isOption4) {//只包含大写字母
            setPassText(Content.letter2);
        } else if (isOption2 && !isOption1 && !isOption3 && !isOption4) {//只包含小写字母
            setPassText(Content.letter1);
        } else if (isOption3 && !isOption1 && !isOption2 && !isOption4) {//只包含数字
            setPassText(Content.num);
        } else if (isOption4 && !isOption1 && !isOption2 && !isOption3) {//只包含特殊符号
            setPassText(Content.symbol);
        } else if (isOption1 && isOption2 && !isOption3 && !isOption4) {//包含大小写字母
            String[] add = ArrayUtils.add(Content.letter2, Content.letter1);
            setPassText(add);
        } else if (isOption1 && isOption3 && !isOption2 && !isOption4) {//包含大写字母数字
            String[] add = ArrayUtils.add(Content.letter2, Content.num);
            setPassText(add);
        } else if (isOption1 && isOption4 && !isOption2 && !isOption3) {//包含大写字母特殊符号
            String[] add = ArrayUtils.add(Content.letter2, Content.symbol);
            setPassText(add);
        } else if (isOption1 && isOption2 && isOption3 && !isOption4) {//包含大小写字母数字
            String[] add = ArrayUtils.add(Content.letter2, Content.letter1);
            String[] add1 = ArrayUtils.add(add, Content.num);
            setPassText(add1);
        } else if (isOption1 && isOption2 && isOption4 && !isOption3) {//包含大小写字母特殊符号
            String[] add = ArrayUtils.add(Content.letter1, Content.letter2);
            String[] add1 = ArrayUtils.add(add, Content.symbol);
            setPassText(add1);
        } else if (isOption1 && isOption3 && isOption4 && !isOption2) {//包含大写字母数字特殊符号
            String[] add = ArrayUtils.add(Content.letter2, Content.num);
            String[] add1 = ArrayUtils.add(add, Content.symbol);
            setPassText(add1);
        } else if (isOption2 && isOption3 && !isOption1 && !isOption4) {//包含小写字母数字
            String[] add = ArrayUtils.add(Content.letter1, Content.num);
            setPassText(add);
        } else if (isOption2 && isOption4 && !isOption1 && !isOption3) {//包含小写字母特殊符号
            String[] add = ArrayUtils.add(Content.letter1, Content.symbol);
            setPassText(add);
        } else if (isOption2 && isOption3 && isOption4 && !isOption1) {//包含小写字母数字特殊符号
            String[] add = ArrayUtils.add(Content.letter1, Content.num);
            String[] add1 = ArrayUtils.add(add, Content.symbol);
            setPassText(add1);
        } else if (isOption3 && isOption4 && !isOption1 && !isOption2) {//包含数字特殊符号
            String[] add = ArrayUtils.add(Content.num, Content.symbol);
            setPassText(add);
        } else if (isOption1 && isOption2 && isOption3 && isOption4) {//包含大小写字母数字特殊符号
            String[] add = ArrayUtils.add(Content.letter2, Content.letter1);
            String[] add1 = ArrayUtils.add(Content.num, Content.symbol);
            String[] add2 = ArrayUtils.add(add, add1);
            setPassText(add2);
        }
    }

    //生成随机密码
    private void setPassText(String[] array) {
        int count = 0;
        String password = "";
        Random random = new Random();
        while (count < passNumber) {
            password = password + array[random.nextInt(array.length)];
            count++;
        }
        mDataBinding.tvPassText.setText(password);
        mDataBinding.ivPasswordCopy.setVisibility(View.VISIBLE);
    }

    //是否包含大写字母
    private void clickOption1() {
        if (isOption1) {
            if (!isOption2 && !isOption3 && !isOption4) return;
            isOption1 = false;
            mDataBinding.ivPassOption1.setImageResource(R.drawable.guan);
        } else {
            isOption1 = true;
            mDataBinding.ivPassOption1.setImageResource(R.drawable.kai);
        }
    }

    //是否包含小写字母
    private void clickOption2() {
        if (isOption2) {
            if (!isOption1 && !isOption3 && !isOption4) return;
            isOption2 = false;
            mDataBinding.ivPassOption2.setImageResource(R.drawable.guan);
        } else {
            isOption2 = true;
            mDataBinding.ivPassOption2.setImageResource(R.drawable.kai);
        }
    }

    //是否包含数字
    private void clickOption3() {
        if (isOption3) {
            if (!isOption1 && !isOption2 && !isOption4) return;
            isOption3 = false;
            mDataBinding.ivPassOption3.setImageResource(R.drawable.guan);
        } else {
            isOption3 = true;
            mDataBinding.ivPassOption3.setImageResource(R.drawable.kai);
        }
    }

    //是否包含特殊字符
    private void clickOption4() {
        if (isOption4) {
            if (!isOption1 && !isOption2 && !isOption3) return;
            isOption4 = false;
            mDataBinding.ivPassOption4.setImageResource(R.drawable.guan);
        } else {
            isOption4 = true;
            mDataBinding.ivPassOption4.setImageResource(R.drawable.kai);
        }
    }

}